// @Time：2022/1/19 16:19
// @Software：GoLand
// @Author：JentZhang
package resp

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// Result 接口响应封装
type Result struct {
	Code int         `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data"`
}

// 接口响应的状态码
const (
	Success   = 2000
	Failed    = 4000
	NotExist  = 4001
	Exception = 5000
)

// ErrorCode 所有响应的错误码
var ErrorCode = map[int]string{
	Success:   "操作成功",
	Failed:    "操作失败",
	Exception: "系统异常",
	NotExist:  "记录不存在",
}

// ApiResponse API接口响应封装方法
func ApiResponse(c *gin.Context, args ...interface{}) {
	code := Success
	var data interface{}
	if len(args) > 0 {
		switch len(args) {
		case 2: // args 是两个参数时，第一个参数时接口响应码，第二个参数是返回的数据
			code = args[0].(int)
			data = args[1]
		case 1: // args 是1个参数时，第一个参数是返回的数据
			data = args[0]
		default: // args的参数异常
			code = Exception
		}
	}
	res := &Result{
		Code: code,
		Msg:  ErrorCode[code],
		Data: data,
	}
	c.JSON(http.StatusOK, res)
}
